#include<iostream>

using namespace std ;

const int maxn = 11 ;

int n ;
int path[maxn];
bool st[maxn];

void dfs(int x) {
    if(x == n) {
        //x == n 代表 0 ~ n - 1 中已经填了 n 个数 了
        for (int i = 0; i < n; ++i) {
            printf("%d " , path[i]);
        }
        printf("\n");
        return ;
    }

    for (int i = 1; i <= n; ++i) {
        //遍历这 n 个数 ， 选出能填进去的
        if(st[i] == false) {
            path[x] = i ;
            st[i] = true ;
            dfs(x + 1);
            st[i] = false ;
        }
    }
}

int main() {

    scanf("%d" , &n);
    dfs(0);
    return 0;
}